package com.example.supplychainbackend.service;

import com.example.supplychainbackend.controller.dto.blockchain.UploadInfo;
import com.example.supplychainbackend.controller.dto.production.ProductionCertDto;
import com.example.supplychainbackend.controller.dto.production.ProductionProcessDto;
import com.example.supplychainbackend.controller.dto.production.ProductionSchedulingDto;
import com.example.supplychainbackend.controller.dto.production.ProductionWorkorderDto;

import java.util.List;

public interface ProductionService {
    Long createProductionCert(ProductionCertDto certDto);
    ProductionCertDto updateProductionCert(Long id,ProductionCertDto certDto);
    ProductionCertDto updateProductionCertApply(Long id, int status);
    Long deleteProductionCert(Long id);
    ProductionCertDto getByIdProductionCert(Long id);
    List<ProductionCertDto> getListProductionCert();

    String createProductionWorkorder(ProductionWorkorderDto dto);
    ProductionWorkorderDto updateProductionWorkorder(String id, ProductionWorkorderDto dto);
    Long deleteProductionWorkorder(String id);
    ProductionWorkorderDto getByIdProductionWorkorder(String id) throws Exception;
    ProductionWorkorderDto getByMOProductionWorkorder(String mo);
    List<ProductionWorkorderDto> getListProductionWorkorder();

    Long createProductionScheduling(ProductionSchedulingDto dto);
    ProductionSchedulingDto updateProductionScheduling(Long id, ProductionSchedulingDto dto);
    Long deleteProductionScheduling(Long id);
    ProductionSchedulingDto getByIdProductionScheduling(Long id) throws Exception;
    List<ProductionSchedulingDto> getListByWOProductionScheduling(String wo);
    ProductionSchedulingDto getByBNProductionScheduling(String bn);
    List<ProductionSchedulingDto> getListProductionScheduling();

    Long createProductionProcess(ProductionProcessDto dto);
    ProductionProcessDto updateProductionProcess(Long id, ProductionProcessDto dto) throws Exception;
    Long deleteProductionProcess(Long id);
    ProductionProcessDto getByIdProductionProcess(Long id) throws Exception;
    List<ProductionProcessDto> getListProductionProcess();

    ProductionSchedulingDto finishScheduling(Long id);
    ProductionWorkorderDto reportToWorkOrder(ProductionSchedulingDto schedulingDto);
    ProductionWorkorderDto finishWorkOrder(String id);


    UploadInfo uploadProductionCert(Long id);

    UploadInfo uploadProductionWorkorder(String id);

    UploadInfo uploadProductionScheduling(Long id);

    UploadInfo uploadProductionProcess(Long id);

    List<ProductionCertDto> getListProductionCertByEid(String eid);

    List<ProductionWorkorderDto> getListProductionWorkorderByEid(String eid);

    List<ProductionSchedulingDto> getListProductionSchedulingByEid(String eid);

    List<ProductionProcessDto> getListProductionProcessByEid(String eid);
}
